package perucuy.services;

import java.util.List;

import org.apache.log4j.*;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import perucuy.dao.*;
import perucuy.transfers.*;

public class UsuarioService {
    private static Logger log = Logger.getLogger(UsuarioService.class);

    UsuarioDAO dao = DAOFactory.getDAOFactory(DAOFactory.Tipo.SQLMAP).getUsuarioDAO();

    public void registrarUsuario(UsuarioTO usuario) {
        /*try {
            UsuarioDAO dao = new UsuarioDAO();
            int x = dao.create(usuario);
            usuario.setCodigousuario(x);
            log.debug("Usuario " + usuario.getNombreusuario() + " registrado");
        } catch (IOException ex) {
            log.debug("Error: " + ex.getMessage());
        }*/
    }

    public UsuarioTO buscarUsuario(UsuarioTO usuario, ActionMessages msgs) {
		List l = dao.usuarios(usuario);
		UsuarioTO retorno = null;
		switch (l.size()) {
		case 0:
			msgs.add("error1", new ActionMessage("error.usuario.noexiste",
					usuario.getNombre()));
			break;
		case 1:
			retorno = (UsuarioTO) l.get(0);
			break;
		default:
			msgs.add("error1", new ActionMessage("error.usuario.duplicado",
					usuario.getNombre()));
			break;
		}
		return retorno;
    }

	public boolean existeErrorClave(UsuarioTO usuarioBean, ActionMessages msgs) {
		int error = 0;
		
/*		if (usuarioBean.getAnterior() == null
				|| usuarioBean.getAnterior().equals("")) {
			msgs.add("error1", new ActionMessage("usuario.cambiarClave.error1", "la clave actual."));
			error++;
		}*/
		if (!usuarioBean.getAnterior().equals(usuarioBean.getClave())) {
			msgs.add("error3", new ActionMessage("usuario.cambiarClave.error3"));
			return true;
		}
		error=0;
		log.debug("clave actual: "+usuarioBean.getClave());
		if (usuarioBean.getNueva1() == null
				|| usuarioBean.getNueva1().equals("")) {
			msgs.add("error2", new ActionMessage("usuario.cambiarClave.error1", "una nueva clave."));
			error++;
		}
		if (usuarioBean.getClave().equals(usuarioBean.getNueva1())) {
			msgs.add("error4", new ActionMessage("usuario.cambiarClave.error2", "que escribi&oacute; no debe ser igual a la actual."));
			error++;
		}
		if (!usuarioBean.getNueva1().equals(usuarioBean.getNueva2())) {
			msgs.add("error5", new ActionMessage("usuario.cambiarClave.error2", "debe ser igual a la confirmaci&oacute;n de la nueva clave."));
			error++;
		}
		if (error > 0)
			return true;
		
		// Si no existe ningun problema se procede a asignar la clave
		usuarioBean.setClave(usuarioBean.getNueva1());
		return false;
	}

	public void cambiarContrasenia(UsuarioTO usuarioBean) {
		dao.cambiarContrasenia(usuarioBean);
		log.debug("se guardo realizo el cambio de clave");
	}
	
    public UsuarioTO loguearUsuario(UsuarioTO usuario, ActionMessages msgs) {
        UsuarioTO ret = usuario;
        log.debug("Entro al metodo de logueo");
        /*        try {
            UsuarioDAO dao = new UsuarioDAO();
            usuario.setIndicador(1); // No existe en la BD
            if (dao.buscarUsuario(usuario.getNombreusuario(),
                                  usuario.getClaveusuario())) {
                log.debug("Usuario " + usuario.getNombreusuario() +
                          " logueado");
                ret = dao.getUsuario(usuario); // recupera los datos del objeto
                ret.setIndicador(2); // Existe y se logueo
            }
        } catch (IOException ex) {
            log.debug("Error: "); // + ex.getMessage()
            usuario.setIndicador(3); // Un error diferentes
        }*/
        return ret;
    }
}
